class AIManager:
    #初始化方法
    def __init__(self, capacity=20):
        #创建一个列表
        self.assistants = []
        #列表容量为capacity--20
        self.capacity = capacity
    #增加AI助手
    def add_assistant(self, assistant, silent=False):
        # any() 函数用于检查可迭代对象中是否至少有一个元素为 True。
        # 如果存在一个为 True 的元素，则返回 True；
        # 如果所有元素都为 False 或可迭代对象为空，则返回 False。
        if any(a.id == assistant.id for a in self.assistants):
            if not silent:
                print(f"错误：ID【{assistant.id}】已存在，无法添加。")
            return False

        #确保评分在规定范围
        if not (0 <= assistant.score <= 100):
            if not silent:
                print(f"错误：能力评分必须在0-100之间，当前值【{assistant.score}】无效。")

        #.strip()
        #移除字符串开头和结尾的空白字符
        #返回移除空白后的新字符串（原字符串不变）
        #空白字符包括：空格、制表符(\t)、换行符(\n)等
        #确保名称非空且去除首尾空格
        if not assistant.name or not assistant.name.strip():
            if not silent:
                print("错误：助手名称不能为空。")
            return False

        #确保AI数据类型规范
        valid_types = ["文本助手", "图像助手", "数据分析助手", "翻译助手", "语音助手"]
        if assistant.type not in valid_types:
            if not silent:
                print(f"错误：助手类型无效，必须是以下之一：{', '.join(valid_types)}")
            return False

        #确保AI助手储存空间
        if len(self.assistants) >= self.capacity:
            if not silent:
                print("存储已满，无法添加更多AI助手。")
            return False

        #新增满足条件的AI助手
        self.assistants.append(assistant)
        if not silent:
            print(f"助手【{assistant.name}】添加成功！")
        return True
    #展示所有AI助手
    def list_assistants(self):
        if not self.assistants:
            print("暂无AI助手数据。")
            return
        for i, a in enumerate(self.assistants, 1):
            print(f"{i}. {a}")
    #根据ID查询AI助手
    def find_by_id(self, id):
        #a for a in self.assistants if a.id == id
        #生成器表达式：遍历助手列表，只生成满足条件 a.id == id 的助手对象

        #next(生成器, None)
        #从生成器中获取第一个元素
        #如果生成器为空（没有匹配的助手），返回默认值 None
        return next((a for a in self.assistants if a.id == id), None)
    #展示查询到的AI助手信息
    def show_details(self, id):
        a = self.find_by_id(id)
        if a:
            print("查询结果:", a)
        else:
            print("未找到该ID对应的AI助手。")
    #修改AI助手信息
    def modify_assistant(self, id, attr, value):
        #根据AI查询要修改的AI助手
        assistant = self.find_by_id(id)
        if not assistant:
            print(f"未找到ID为【{id}】的AI助手，修改失败。")
            return
        #hasattr(object, name) 函数
        #检查 object 是否包含名为 name 的属性
        # 返回布尔值：True（存在）或 False（不存在）
        if not hasattr(assistant, attr):
            print(f"无效属性【{attr}】，修改失败。")
            return
        if attr == "online":
            #如果 value 是列表 ["1", "True", "true", "是"] 中的任意一个，则 value 变为 True
            #否则，value 变为 False
            value = value in ["1", "True", "true", "是"]
        elif attr == "score":
            #错误处理
            try:
                #类型准换
                value = float(value)
            except ValueError:
                print("能力评分必须是数字！")
                return
        #setattr(object, name, value) 函数
        # 将 object 的 name 属性设置为 value
        # 如果属性不存在，会创建新属性，不返回任何值（None）
        setattr(assistant, attr, value)
        print(f"助手【{assistant.name}】(ID:{id}) 的属性【{attr}】已修改为：{value}")
    #删除AI助手
    def delete_assistant(self, id):
        a = self.find_by_id(id)
        if a:
            self.assistants.remove(a)
            print(f"助手【{a.name}】已删除。")
        else:
            print("未找到该助手。")
    #启动AI助手
    def start_service(self, id):
        a = self.find_by_id(id)
        if not a:
            print("未找到该助手。")
            return
        a.online = True
        print(f"助手【{a.name}】已在运行。")
    #停止AI助手
    def stop_service(self, id):
        a = self.find_by_id(id)
        if not a:
            print("未找到该助手。")
            return
        a.online = False
        print(f"助手【{a.name}】已停止。")
    #根据ID为AI助手分配任务
    def assign_task(self, id, task):
        a = self.find_by_id(id)
        if not a:
            print("未找到该助手。")
            return
        if not a.online:
            print(f"{a.name} 当前离线，无法执行任务。")
        else:
            print( a.perform_task(task))
    #显示系统统计信息
    def show_statistics(self):
        total = len(self.assistants)
        online = sum(a.online for a in self.assistants)
        offline = total - online
        avg_score = (sum(a.score for a in self.assistants) / total) if total > 0 else 0
        print(f"\n系统统计信息：")
        print(f"总助手数: {total}")
        print(f"在线助手数: {online}")
        print(f"离线助手数: {offline}")
        print(f"平均能力评分: {avg_score:.2f}")
